/*!
 * \file ExpDumper.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 扩展数据导出器头文件
 * 
 * \details 本文件定义了扩展数据导出器类ExpDumper：
 *          - 实现IHisDataDumper接口，提供历史数据导出功能
 *          - 支持K线数据导出
 *          - 支持tick数据导出
 *          - 支持Level2数据导出（订单队列、订单明细、逐笔成交）
 *          - 通过回调函数将数据导出到外部系统
 *          - 支持多种数据格式和自定义导出逻辑
 */
#pragma once
#include "../Includes/IDataWriter.h"

USING_NS_WTP;

/**
 * @class ExpDumper
 * @brief 扩展数据导出器类
 * 
 * @details ExpDumper是WonderTrader数据服务系统的扩展数据导出器，负责：
 *          - 实现历史数据导出接口
 *          - 支持K线数据导出到外部系统
 *          - 支持tick数据导出到外部系统
 *          - 支持Level2数据（订单队列、订单明细、逐笔成交）导出
 *          - 通过回调机制实现自定义导出逻辑
 *          - 支持多种数据格式和导出目标
 * 
 * @note 该类通过回调函数将数据传递给外部系统进行处理
 * @warning 导出过程中需要确保数据的完整性和一致性
 */
class ExpDumper : public IHisDataDumper
{
public:
	/**
	 * @brief 构造函数
	 * @details 初始化扩展数据导出器
	 * @param id 导出器标识符
	 */
	ExpDumper(const char* id) :_id(id) {}
	
	/**
	 * @brief 析构函数
	 * @details 清理资源，释放导出器
	 */
	virtual ~ExpDumper() {}

public:
	/**
	 * @brief 导出历史K线数据
	 * @details 将指定合约的历史K线数据导出到外部系统
	 * @param stdCode 标准合约代码
	 * @param period K线周期（如1m、5m、1d等）
	 * @param bars K线数据数组
	 * @param count K线数据数量
	 * @return bool 导出是否成功
	 */
	virtual bool dumpHisBars(const char* stdCode, const char* period, WTSBarStruct* bars, uint32_t count) override;

	/**
	 * @brief 导出历史tick数据
	 * @details 将指定合约的历史tick数据导出到外部系统
	 * @param stdCode 标准合约代码
	 * @param uDate 交易日期（格式：YYYYMMDD）
	 * @param ticks tick数据数组
	 * @param count tick数据数量
	 * @return bool 导出是否成功
	 */
	virtual bool dumpHisTicks(const char* stdCode, uint32_t uDate, WTSTickStruct* ticks, uint32_t count) override;

	/**
	 * @brief 导出历史订单队列数据
	 * @details 将指定合约的历史订单队列数据导出到外部系统
	 * @param stdCode 标准合约代码
	 * @param uDate 交易日期（格式：YYYYMMDD）
	 * @param items 订单队列数据数组
	 * @param count 订单队列数据数量
	 * @return bool 导出是否成功
	 */
	virtual bool dumpHisOrdQue(const char* stdCode, uint32_t uDate, WTSOrdQueStruct* items, uint32_t count) override;

	/**
	 * @brief 导出历史订单明细数据
	 * @details 将指定合约的历史订单明细数据导出到外部系统
	 * @param stdCode 标准合约代码
	 * @param uDate 交易日期（格式：YYYYMMDD）
	 * @param items 订单明细数据数组
	 * @param count 订单明细数据数量
	 * @return bool 导出是否成功
	 */
	virtual bool dumpHisOrdDtl(const char* stdCode, uint32_t uDate, WTSOrdDtlStruct* items, uint32_t count) override;

	/**
	 * @brief 导出历史逐笔成交数据
	 * @details 将指定合约的历史逐笔成交数据导出到外部系统
	 * @param stdCode 标准合约代码
	 * @param uDate 交易日期（格式：YYYYMMDD）
	 * @param items 逐笔成交数据数组
	 * @param count 逐笔成交数据数量
	 * @return bool 导出是否成功
	 */
	virtual bool dumpHisTrans(const char* stdCode, uint32_t uDate, WTSTransStruct* items, uint32_t count) override;

private:
	std::string	_id;	/*!< 导出器标识符 */
};

